package com.vanke.agent;

//
// Copyright (c) 2014, 保留所有权利。
//
// Cfg.java
//
// 作    者：王红燕
// 当前版本：1.0
// 2014 下午9:54:56
//
// 
//

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;

/**
 *
 */
public class Cfg {
	static final Map<String, String> values = new ConcurrentHashMap<String, String>();
	static {
		load();
	}

	public static void load() {
		Connection con = ADataSource.getConnection(ADataSource.SCHEMA_BIZ);
		Statement stmt = null;
		ResultSet rs = null;
		String sql = "select paramsname,paramsvalue from crm_tsys_params";
		try {
			stmt = con.createStatement();
			rs = stmt.executeQuery(sql);
			while (rs.next()) {
				String name = rs.getString(1);
				String value = rs.getString(2);
				if (name == null || value == null) {
					continue;
				}
				values.put(name.trim(), value.trim());
			} // end while
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			ADataSource.close(rs, stmt, con);
		}
	} //~load()

	public static String get(String key) {
		String val = values.get(key);
		return val == null ? "" : val;
	}

	public static void set(String key, String value) {
		if (key == null) {
			return;
		}
		values.put(key, value);
	}

	public static void save() {
		Connection con = ADataSource.getConnection(ADataSource.SCHEMA_BIZ);
		PreparedStatement pstmt = null;
		String sql = "update crm_tsys_params set paramsvalue=? where paramsname=?";
		try {
			pstmt = con.prepareStatement(sql);
			Iterator<Entry<String, String>> iter = values.entrySet().iterator();
			while (iter.hasNext()) {
				Entry<String, String> entry = iter.next();
				pstmt.setString(1, entry.getValue()); 	// paramsvalue
				pstmt.setString(2, entry.getKey());		// paramsname
				pstmt.addBatch();
			} // end while
			pstmt.executeBatch();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			ADataSource.close(null, pstmt, con);
		}
	} //~save
	
//	static final ConcurrentLinkedQueue<String> keys = new ConcurrentLinkedQueue<String>();
//	static final Map<String, String> values = new ConcurrentHashMap<String, String>();
//
//	static RandomAccessFile randFile = null;
//	static {
//		try {
//			randFile = new RandomAccessFile("config.ini", "rw");
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//		load();
//	}
//
//	public static void load() {
//		try {
//			List<String> ks = new ArrayList<String>();
//			FileInputStream fis = new FileInputStream("config.ini");
//			InputStreamReader read = new InputStreamReader(fis, "UTF-8");
//			BufferedReader reader = new BufferedReader(read);
//			String line = null;
//			while ((line = reader.readLine()) != null) {
//				line = line.trim();
//				if (line.length() > 0 && line.charAt(0) == '#') {
//					ks.add(line);
//					values.put(line, "");
//					continue;
//				}
//				int index = line.indexOf('=');
//				if (index == -1) {
//					ks.add(line);
//					values.put(line, "");
//					continue;
//				}
//				String key = line.substring(0, index).trim();
//				String value = line.substring(index + 1).trim();
//				//				setConfig(key.trim(), value.trim());
//				ks.add(key);
//				values.put(key, value);
//			} //
//			synchronized (keys) {
//				keys.clear();
//				keys.addAll(ks);
//			}
//			reader.close();
//			fis.close();
//		} catch (FileNotFoundException e) {
//			e.printStackTrace();
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//	} //~load()
//
//	public static String get(String key) {
//		String val = values.get(key);
//		return val == null ? "" : val;
//	}
//
//	public static void save() {
//		FileLock lock = null;
//		try {
//			randFile.seek(0);
//			// 写入时要锁定文件，否则会出现脏读或重复写，尤其在多线程情况下
//			lock = randFile.getChannel().tryLock();
//			for (String key : keys) {
//				String val = values.get(key);
//				if (key.equals("")) {
//					randFile.write("\r\n".getBytes());
//				} else {
//					String line = key
//							+ (val == null || val.equals("") ? "" : "=" + val)
//							+ "\r\n";
//					randFile.write(line.getBytes());
//				}
//			}
//		} catch (IOException e) {
//			e.printStackTrace();
//		} finally {
//			if (lock != null) {
//				try {
//					lock.release();
//				} catch (Exception e) {
//					e.printStackTrace();
//				}
//			}
//		}
//	}
//
//	public static void set(String key, String value) {
//		if (key != null) {
//			if (!keys.contains(key)) {
//				keys.add(key);
//			}
//			values.put(key, value);
//		}
//	}
}
